Git Bash prompt

Descripcion

Como configurar el prompt de Git Bash para que se muestre de manera personalizada.

La configuración deja el prompt así:

Metodo

Lo primero que tenemos que hacer es editar el archivo de configuración, que se encuentra en:

C:\Users\manuel.bascoy\AppData\Local\Programs\Git\etc\profile.d\git-prompt.sh

En este archivo de configuración introducimos la siguiente configuración:

if test -f /etc/profile.d/git-sdk.sh
then
	TITLEPREFIX=SDK-${MSYSTEM#MINGW}
else
	TITLEPREFIX=$MSYSTEM
fi

if test -f ~/.config/git/git-prompt.sh
then
	. ~/.config/git/git-prompt.sh
else
	PS1='\[\033]0;$TITLEPREFIX:$PWD\007\]' # set window title
	PS1="$PS1"'\n'                 # new line
	PS1="$PS1"'\[\033[32m\]'       # change to green
	PS1="$PS1"'\u@\h '             # user@host
	PS1="$PS1"'\[\033[33m\]'       # change to brownish yellow
	PS1="$PS1"'\w'                 # current working directory
	if test -z "$WINELOADERNOEXEC"
	then
		GIT_EXEC_PATH="$(git --exec-path 2>/dev/null)"
		COMPLETION_PATH="${GIT_EXEC_PATH%/libexec/git-core}"
		COMPLETION_PATH="${COMPLETION_PATH%/lib/git-core}"
		COMPLETION_PATH="$COMPLETION_PATH/share/git/completion"
		if test -f "$COMPLETION_PATH/git-prompt.sh"
		then
			. "$COMPLETION_PATH/git-completion.bash"
			. "$COMPLETION_PATH/git-prompt.sh"
			PS1="$PS1"'\[\033[36m\]'  # change color to cyan
			PS1="$PS1"'`__git_ps1`'   # bash function
			PS1="$PS1"'\n'
			PS1="$PS1"'`/c/Users/manuel.bascoy/AppData/Local/Programs/Git/etc/profile.d/custom-prompt.sh`'   # bash function
		fi
	fi
	PS1="$PS1"'\[\033[0m\]'        # change color
	PS1="$PS1"'\n'                 # new line
	PS1="$PS1"'\[\033[31m\]'        # change color
	PS1="$PS1"'_> '                 # prompt: always >
	PS1="$PS1"'\[\033[0m\]'        # change color
fi

MSYS2_PS1="$PS1"               # for detection by MSYS2 SDK's bash.basrc

# Evaluate all user-specific Bash completion scripts (if any)
if test -z "$WINELOADERNOEXEC"
then
	for c in "$HOME"/bash_completion.d/*.bash
	do
		# Handle absence of any scripts (or the folder) gracefully
		test ! -f "$c" ||
		. "$c"
	done
fi
            

Hay que tener en cuenta la linea que tiene la ruta del script que ejecuta el git log:

/c/Users/manuel.bascoy/AppData/Local/Programs/Git/etc/profile.d/custom-prompt.sh

Y el contenido del script es el siguiente:

git log 2>/dev/null| head -n 4 | grep -v Merge | tr '\n' ' ' | awk '{ printf " \033[1;33m("$4 ") \033[1;31m(" $2 ") \033[35m{" $(NF-3) "-" $(NF-4) "}\033[1;34m[" $(NF-2) "]"}'

Modificando el git-prompt.sh y añadiendo el custom-prompt.sh ya tendríamos la consola de Git Bash personalizada

Linux Bash

Si queremos conseguir el mismo efecto en el bash de linux solo tenemos que colocar el siguiente código en el archivo ~/.bashrc:

parse_git_branch() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}

parse_git_log() {
        COMMIT_USER=$(git log 2> /dev/null | head -n 4 | grep -v Merge | tr '\n' ' ' | awk -F "[:<]" '{print $2}')

        git log 2> /dev/null | head -n 4 | grep -v Merge | tr '\n' ' ' | awk -v env_var="$COMMIT_USER" '{ printf "\033[1;33m{"env_var"} \033[1;31m(" $2 ") \033[35m{" $(NF-3) "-" $(NF-4) "}\033[1;34m[" $(NF-2) "]"}'
}

export PS1="╭─\e[45m\e[30m\u\e[1;32m@\h\e[40m \[\e[32m\]\w \e[1;34m\$(parse_git_branch)\[\e[00m\]\n|\$(parse_git_log)\n╰─>\[\e[00m\] "

Script antiguo:

parse_git_branch() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}

parse_git_log() {
        git log 2>/dev/null| head -n 4 | grep -v Merge | tr '\n' ' ' | awk '{ printf " \033[1;33m("$4 ") \033[1;31m(" $2 ") \033[35m{" $(NF-3) "-" $(NF-4) "}\033[1;34m[" $(NF-2) "]"}'
}

export PS1="\u@\h \[\e[32m\]\w \[\e[91m\]\$(parse_git_branch)\[\e[00m\]\n\$(parse_git_log)\n_>\[\e[00m\] "
Tags

Git | Bash | prompt